package com.thinkTank.oa.service;


import java.util.List;
import java.util.Map;

import com.thinkTank.oa.base.BaseService;
import com.thinkTank.oa.entity.ButtDetails;
import com.thinkTank.oa.entity.Conference;
import com.thinkTank.oa.entity.Customer;
import com.thinkTank.oa.entity.Demand;
import com.thinkTank.oa.entity.Person;
import com.thinkTank.oa.entity.Project;

/**
 * 对接详情service层
 * @author 董力
 * 2018-08-20
 */
public interface DetailsService extends BaseService<ButtDetails> {

	/**
	 * 新增
	 * @param details
	 */
	public void addDetails(ButtDetails details);
	
	/**
	 * 模糊查询对接详情表
	 * @param details
	 * @return
	 */
	public List<ButtDetails> findMDetailsList(ButtDetails details);
	
	/**
	 * 通过pid查询对接详情
	 * @param id
	 * @return
	 */
	public ButtDetails findDetailsByPid(String pid);
	
	
	/**
	 * 修改
	 * @param details
	 */
	public void updateDetails(ButtDetails details);
	/****
	 * @author dq
	 * @date 2018-08-22
	 * 根据传入参数插入 对接详情 一般是第一次对接
	 * @param projectId 项目ID
	 * @param demandId 需求ID
	 * @param confId 会议ID
	 * @param custromId 客户ID
	 * @param presonId 专家ID
	 * @param userId 对接负责人
	 * @return
	 */
	public Integer addFirstButtDetails(Project projectId ,Demand demandId,Conference confId,Customer custromId,Person presonId,String userId);

	/***
	 * 根据用户ID查询相关的匹配任务
	 * @date 2018-08-22
	 * @author dq
	 * @param userId 用户Id
	 * @return 返回 对应对接详情列表
	 */
	public List<ButtDetails> findButtDetailsByUserId(String userId);

	/***
	 * @date 2018-08-23
	 * @author dq
	 * 添加对接详情，并把上一次新新加的对接详情改成过期
	 * @param olderButt 上次对接详情
	 * @param buttDetails 需要增加的对接详情
	 * @return
	 */
	public Integer addButtDetails(ButtDetails olderButt,ButtDetails buttDetails);
	
	/**
	 * 通过专家id模糊查询
	 * @author dongli
	 * @date 2018年8月24日
	 * @param personId
	 * @return
	 */
	public List<ButtDetails> findButtDetailsByPersonId(ButtDetails buttDetails);

	/***
	 * @date 2018-08-23
	 * @author dq
	 * 根据当前的对接详情查看  历史详情 限定了用户id
	 * @param olderButt
	 * @return
	 */

	public List<ButtDetails>  findHistoryButtDetails(ButtDetails olderButt);

	/***
	 * @date 2018-08-24
	 * @author dq
	 * 根据用户id查询 分组查询用户任务个数
	 * @param userId
	 * @return
	 */
	public List<Map<Object,Object>> findButtDetailsGoupbyStatus(String userId);
	/***
	 * @date 2018-08-24
	 * @@author dq
	 * @param userId 用户ID
	 * @param status 对接状态
	 * 根据用户ID和对接状态查询对接详情
	 * @return
	 */
	public List<ButtDetails> findButtDetailsByStatus(String userId,Integer status);

	
	/**
	 * 查看客户匹配的需求
	 * xyx
	 * @param customer
	 * @return
	 * 2018年8月24日
	 */
	public List<ButtDetails> findCustomerDemand(String customerId);
	
	/**
	 * 查看客户匹配的项目
	 * xyx
	 * @param customer
	 * @return
	 * 2018年8月24日
	 */
	public List<ButtDetails> findCustomerProject(String customerId);
	
	/**
	 * 通过专家pid查询对接详情
	 * @author dongli
	 * @date 2018年8月26日
	 * @param personId
	 * @return
	 */
	public ButtDetails getDetailsByPersonId(String personId);

	
	/**
	 * 通过客户id查询对接需求
	 * @author xyx
	 * @date 2018年8月24日
	 * @param customerId
	 * @return
	 */
	public List<ButtDetails> findDemandByCustomerId(ButtDetails buttDetails);
	
	
	/**
	 * 通过客户id查询对接项目
	 * @author xyx
	 * @date 2018年8月24日
	 * @param customerId
	 * @return
	 */
	public List<ButtDetails> findProjectByCustomerId(ButtDetails buttDetails);


	/**
	 * 根据条件查询对接详情
	 * @author pdz
	 * @date 2018年8月30日
	 * @param buttDetails
	 */
    public List<ButtDetails> findButtDetails(ButtDetails buttDetails);
    
    /**
	 * 通过专家pid和需求pid来查询对接详情
	 * @author dongli
	 * @date 2018年9月27日
	 * @param buttDetails
	 * @return
	 */
	public List<ButtDetails> findDetailsByPersonIdAndDemandId(ButtDetails buttDetails);


	/**
	 * 通过对接详情需求id集合查询详情表
	 * xyx
	 * @param buttDetails
	 * @return
	 * 2018年9月27日
	 */
	public List<ButtDetails> queryInButtDetails(ButtDetails buttDetails);
	
	/**
	 * 专家详情页面已匹配需求显示前10条数据
	 * @author dongli
	 * @date 2018年9月28日
	 * @param buttDetails
	 * @return
	 */
	public List<ButtDetails> findButtDetailsTop10(ButtDetails buttDetails);
	
	/**
	 * 通过专家pid联合查询需求信息
	 * @author dongli
	 * @date 2018年10月22日
	 * @param personId
	 * @return
	 */
	public List<Demand> queryDemandList(String personId);
	
}
